void main() {
  /* 数字类型 */
  // num 定义数字类型 可以是整数或浮点数
  // int 定义整数类型 只能是整数
  // double 定义浮点数类型 可以是小数或科学计数法
  num a = 10;
  int b = 20;
  double c = 30.5;
  a = 11.2;
  // b = 22.434; 报错，不能将double赋值给int类型
  c = 14.346;
  c = 1;
  print('数字类型 a $a');
  print('数字类型 b $b');
  print('数字类型 c $c');

  /* 字符串类型 */
  // String 定义字符串类型
  String str1 = "hello world";

  print('字符串类型 $a $b $str1');
  print('小明的年龄是${b + 10}岁');

  // 换行
  String content = '''
  你好
    hello
      world
  ''';
  print('字符串类型-换行 $content');

  /* 布尔类型 */
  // bool 定义布尔类型 只有true和false两种值
  bool flag1 = true;
  bool flag2 = false;
  print('布尔类型 $flag1');
  print('布尔类型 $flag2');

  /* 列表类型 */
  // List 定义列表类型 可以存储不同类型的数据
  List<int> list1 = [1, 2, 3, 4, 5];
  List<String> list2 = ["apple", "banana", "orange", "grape", "pear", "orange"];
  List<dynamic> list3 = [1, "hello", true];
  List list4 = ['111', 11, 24, 546, true, null, [], {}];
  list1.add(6); // 添加元素
  list1.insert(2, 7); // 插入元素
  list1[2] = 8; // 修改元素
  list1.clear(); // 清空列表
  // bool result = list1.every((item) => item > 0);
  // print(result); // 输出结果为 true，因为所有元素都大于 0
  print('List列表list1 $list1');
  list2.remove('orange'); // 删除元素(有多个的话只删除第一个)
  list2.removeAt(1); // 根据索引删除元素
  print('List列表list2 $list2');
  list3[2] = 11.11; // 动态类型可以存储不同类型的数据
  // list3[3] = "world"; // 会报错 索引范围为 0 到 2  直接向超出当前长度的位置赋值会导致错误
  list3.removeLast(); // 删除最后一个元素
  list3.addAll([777, 888, 999]); // 添加多个元素
  print('List列表list3 $list3');
  print('List列表list4 $list4');

  // 遍历列表
  list4.forEach((item) {
    print('list4元素 $item');
  });

  /* 字典类型 */
  // Map 定义字典类型 类似于列表，存储键值对
  Map obj = {"apple": 10, "banana": 20, "orange": 30};
  obj["grape"] = 40; // 添加元素
  obj["orange"] = 'orange'; // 修改元素
  obj.addAll({"newAdd1": 111, "newAdd2": 222, "newAdd3": 333}); // 添加多个元素
  obj.remove("banana"); // 删除元素
  // obj.clear(); // 清空字典
  // 遍历字典
  obj.forEach((key, value) {
    print('字典类型元素 key:$key, value:$value');
  });

  /* 集合类型 */
  // Set 定义集合类型 元素无序且唯一
  Set<int> set1 = {1, 2, 3, 4, 5};
  Set<String> set2 = {"apple", "banana", "orange"};
  set1.add(6); // 添加元素
  set2.remove('banana'); // 删除元素
  set2.addAll({"grape", "pear", "orange"}); // 添加多个元素
  set1.clear(); // 清空集合
  print('Set集合类型set1 $set1');
  print('Set集合类型set2 $set2');
}
